package com.example.zxd;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 小明算分<p>
 * 描述：
 * 小明组织了一场写作比赛，共有 n
 *  名同学参加他组织的写作比赛。
 *<p>
 * 小明邀请了 m
 *  名评委的评分，评分范围是 0
 *  到 10
 *  分。而每位同学的得分就是这些评委给分中去掉一个最高分，去掉一个最低分，剩下 m−2
 *  个评分的平均数。
 *<p>
 * 小明想知道得分最高的同学分数是多少，所以他想请你帮忙告诉他，最终评分保留 2
 *  位小数。
 *<p>
 * 输入：
 * 第一行两个整数 n,m
 * ，表示参加写作比赛的同学数量和评委的数量，题目保证 1≤n≤100,3≤m≤20
 * 。
 *<p>
 * 接下来 n
 *  行，每行 m
 *  个整数 s1,s2,⋯,sm
 * ，表示每位评委对某位同学的具体打分 s
 * ，题目保证 0≤s≤10
 * 。
 *<p>
 * 输出：
 * 第一行一个浮点数，输出最终评分最高的同学的分数，保留两位小数。
 *<p>
 * 样例输入：<p>
 * 7 6<p>
 * 4 7 2 6 10 7<p>
 * 0 5 0 10 3 10<p>
 * 2 6 8 4 3 6<p>
 * 6 3 6 7 5 8<p>
 * 5 9 3 3 8 1<p>
 * 5 9 9 3 2 0<p>
 * 5 8 0 4 1 10<p>
 * 样例输出：<p>
 * 6.00<p>
 * 注释：<p>
 * 题目保证，对于 13
 *  的数据，有 m=3
 * 。
 *<p>
 * 题目保证，对于 100%
 *  的数据，有 1≤n≤100,3≤m≤20,0≤s≤10
 * 。
 * @author: scarborough
 * @datetime: 2025/3/19 - 19:59
 * @status: AC
 */
public class PROB1024 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < n; i++) {
            int[] arr = new int[m];
            int sum = 0;
            for (int j = 0; j < m; j++) {
                arr[j] = sc.nextInt();
            }
            Arrays.sort(arr);
            for (int j = 1; j < m - 1; j++) {
                sum += arr[j];
            }
            if(sum > max) {
                max = sum;
            }
        }
        float res = (float) max / (m - 2);
        System.out.printf("%.2f",res);
    }
}
